package 对象及变量的并发访问;
//"非线程安全":其实就是在多个线程对同一个对象实例变量进行的并发访问时发生的，产生的后果就是"脏读"也就是取到的数据其实是被更改过的
//"非线程安全"问题存在于"实例变量"中，如果方法内部的私有变量，则不存在"非线程安全"问题，所得的结果就是"线程安全"
//"线程安全":就是获得的实例变量的值是经过同步处理的，不会出现"脏读".
//
class HasSelfPrivateNum{
	public void addI(String username)
	{try {
		int num=0;//方法体内的变量是私有的特性，不存在"非线程安全"的问题
			if(username.equals("a"))
			{
				num=100;
				System.out.println("a set over!");
				Thread.sleep(2000);
				
			}
			else
			{
				num=200;
				System.out.println("b set over!");
			}
			System.out.println(username+" num="+num);
		}catch(InterruptedException e)
			{
					e.printStackTrace();
			}
	}
}
class ThreadA extends Thread{
	private HasSelfPrivateNum numRef;
	public ThreadA(HasSelfPrivateNum numRef)
	{
		super();
		this.numRef=numRef;
		
	}
	public void run()
	{
		super.run();
		numRef.addI("a");
	}
}
class ThreadB extends Thread{
	private HasSelfPrivateNum numRef;
	public ThreadB(HasSelfPrivateNum numRef)
	{
		super();
		this.numRef=numRef;
		
	}
	public void run()
	{
		super.run();
		numRef.addI("b");
	}
}

public class Test2_1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		HasSelfPrivateNum	numRef=new HasSelfPrivateNum();
		ThreadA athread=new ThreadA(numRef);
		athread.start();
		ThreadB bthread=new ThreadB(numRef);
		bthread.start();
		

	}

}
